//package io.renren.modules.iots.test.socket.fengzhuang;
//
//import java.io.IOException;
//import java.net.SocketAddress;
//import java.nio.ByteBuffer;
//import java.nio.channels.SelectionKey;
//import java.nio.channels.Selector;
//import java.nio.channels.SocketChannel;
//import java.util.Iterator;
//
//
///**
// * @ClassName: SingleSocketClientThread
// * @Description: 单例模式SocketClientThread类
// * @author 周西栋
// * @date 2018年5月8日
// *
// */
//public class SingleSocketClientThread implements Runnable {
//	
//	/************************************************      单例模式     ************************************************/
//	
//    /**
//     * 创建一个新的实例 SingleSocketClientThread.
//     */
//    private SingleSocketClientThread() {
//    	new Thread(this).start();
//    }
//    
//    /**
//     * 私有对象变量
//     */
//    private static final SingleSocketClientThread single = new SingleSocketClientThread();
//    
//    /**
//     * @Title: getInstance
//     * @Description: 饿汉模式--单例（静态工厂方法） 
//     * @param @return    参数
//     * @return SingleSocketClientThread    返回类型
//     * @throws
//     */
//    public static SingleSocketClientThread getInstance() {
//        return single;
//    }
//	
//	/************************************************      单例模式     ************************************************/
//	
//	@Override
//	public void run() {
//		System.out.println("我启动了一个Socket链接的线程");
////		System.out.println("SocketUtils.SOCKETBEAN_MAP:"+SocketUtils.SOCKETBEAN_MAP.values().toArray().toString());
//        try {
//            // 轮询访问selector
//            while (true) {
//            	try {
//					Thread.sleep(3000);
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				}
//            	for(SocketBean socketBean:SocketUtils.SOCKETBEAN_MAP.values()){
////            		System.out.println("连接状态："+socketBean.getConnectstatus());
////        			System.out.println("------------------------------");
////        			System.out.println("Selector中keys的长度："+socketBean.getSelector().selectedKeys().size());
//        			SelectionKey key = socketBean.getSelectionKey();
//        			Selector selector = socketBean.getSelector();
//        			//如果队列有新的Channel加入，那么Selector.select()会被唤醒
//        			selector.select(1);//设置超时时间
////        			System.out.println("--------------00----------------");
//        			if(key.isConnectable()){
////        				System.out.println("--------------11----------------");
//        				SocketChannel channel = socketBean.getSocketChannel();
//                        // 如果正在连接，则完成连接
//                        if (channel.isConnectionPending()) {
//                        	System.out.println(socketBean.getServerip()+":"+socketBean.getServerport()+"正在尝试连接");
//                            try {
//								channel.finishConnect();
//								System.out.println(socketBean.getServerip()+":"+socketBean.getServerport()+"已经连上了");
//							} catch (Exception e) {
//								socketBean.initialize();
////								e.printStackTrace();
//							}
//                        }
//                        socketBean.setConnectstatus(3);
//                        if (channel.isConnected()) {
//							// 设置成非阻塞
//							channel.configureBlocking(false);
//							//在和服务端连接成功之后，为了可以接收到服务端的信息，需要给通道设置读的权限。
//							channel.register(socketBean.getSelector(), SelectionKey.OP_READ);
//							String msg = readBuffer(channel);
//							//发送消息到服务端  
//							ByteBuffer outBuffer = ByteBuffer.wrap(msg.getBytes());  
//							//在和服务端连接成功之后，为了可以接收到服务端的信息，需要给通道设置读的权限。
//							channel.write(outBuffer);// 将消息回送给客户端  
//						}
//        			}else if(key.isReadable() && socketBean.getConnectstatus() != 3){
//        				SocketChannel channel = socketBean.getSocketChannel();
//        				channel.close();
//        				key.cancel();
//        				System.out.println(socketBean.getServerip()+":"+socketBean.getServerport()+"已经断开，正在重连");
////        				System.out.println("--------------22----------------");
//        				socketBean.setConnectstatus(2);
//        				socketBean.initialize();
//        			}
//            	}
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        
//        
//	}
//	/**
//	 * @Title: readBuffer
//	 * @Description: 从缓冲区中读取数据
//	 * @param @param channel
//	 * @param @throws IOException    参数
//	 * @return void    返回类型
//	 * @throws
//	 */
//	public String readBuffer(SocketChannel channel) throws IOException{
//		// 创建读取的缓冲区
//		ByteBuffer buffer = ByteBuffer.allocate(1024);
//		channel.read(buffer);
//		byte[] data = buffer.array();
//		String msg = new String(data).trim();
//		if(msg != null && !"".equals(msg)){
//			System.out.println("-- -- -- 服务端收到信息：" + msg);
//			// 调用信息转存方法
////          putIntoKafka(msg);
//		}
//		return msg;
//	}
//}